#include <iostream>

using namespace std;

// 111. 二叉树的最小深度
// 给定一个二叉树，找出其最小深度。
//最小深度是从根节点到最近叶子节点的最短路径上的节点数量。
struct TreeNode {
    int val;
    TreeNode *left;
    TreeNode *right;
    TreeNode(): val(0),left(nullptr),right(nullptr) {}
    TreeNode(int x): val(x),left(nullptr),right(nullptr) {}
};
class Solution {
public:
    int minDepth(TreeNode* root) {
        if(root == nullptr)
            return 0;
        if(root->left == nullptr && root->right == nullptr)
            return 1;

        int ret = INT_MAX;
        if(root->left != nullptr)
            ret = min(ret, 1 + minDepth(root->left));
        if(root->right != nullptr)
            ret = min(ret, 1 + minDepth(root->right));
//        int leftMin = minDepth(root->left) + 1;
//        int rightMin = minDepth(root->right) + 1;
//        int res = min(leftMin, rightMin );

        return ret;
    }
};